/** Clase para poder leer del teclado cualquier dato del tipo que sea:
* Entero, Double, Float, Cadena, CarÃ¡cter, Boolean
*/
package utilidades;
import java.util.*;
public class leer {
    private static final Scanner teclado=new Scanner(System.in);
    /** Define el teclado como estÃ¡tico para que no haya que crear
    * ningÃºn objeto de la clase leer y asÃ­ poder utilizar sus
    * mÃ©todos
    */

    //LEER INTEGER
    public static int entero() throws Exception{
        return entero("Introduzca un nÂº entero");
    }
    public static int entero(String s) throws Exception{
        int res=0;
        boolean vale=true;
        do{
            vale=true;
            System.out.println(s);
            try{
                res=teclado.nextInt();
            }
            catch (Exception e) {
                vale=false;
                teclado.next();
            }
        }while(!vale);

        teclado.nextLine();

        return res;
    }
    public static int entero(String s, int min, int max) throws Exception{
        int res=min-1;
        while(res<min || res>max)
            res=entero(s+"["+min+","+max+"]");
     return res;
    }

    //LEER DOUBLE
    public static double doble() throws Exception{
        return doble("Introduzca un nÂº doble");
    }
    public static double doble(String s) throws Exception{
        double res=0;
        boolean vale=true;
        do{
            vale=true;
            System.out.println(s);
            try{
                res=teclado.nextDouble();
            }
            catch (Exception e) {
                vale=false;
                teclado.next();
            }
        }while(!vale);

        teclado.nextLine();

        return res;
    }
    public static double doble(String s, double min, double max) throws Exception{
        double res=min-1;
        while(res<min || res>max)
            res=doble(s+"["+min+","+max+"]");
     return res;
    }

    //LEER FLOAT
    public static float flotante() throws Exception{
        return flotante("Introduzca un nÂº flotante");
    }
    public static float flotante(String s) throws Exception{
        float res=0;
        boolean vale=true;
        do{
            vale=true;
            System.out.println(s);
            try{
                res=teclado.nextFloat();
            }
            catch (Exception e) {
                vale=false;
                teclado.next();
            }
        }while(!vale);

        teclado.nextLine();

        return res;
    }
    public static float flotante(String s, float min, float max) throws Exception{
        float res=min-1;
        while(res<min || res>max)
            res=flotante(s+"["+min+","+max+"]");
     return res;
    }

    //LEER CHAR
    public static char caracter() throws Exception{
        return caracter("Introduzca un caracter");
    }
    public static char caracter(String s) throws Exception{
        char res=0;
        boolean vale=true;
        do{
            vale=true;
            System.out.println(s);
            try{
                res=(teclado.nextLine()).charAt(0);
            }
            catch (Exception e) {
                vale=false;
                teclado.next();
            }
        }while(!vale);

        return res;
    }

    //LEER STRING
    public static String cadena() throws Exception{
        return cadena("Introduzca una cadena");
    }
    public static String cadena(String s) throws Exception{
        String res=null;
        boolean vale=true;
        do{
            vale=true;
            System.out.println(s);
            try{
                res=teclado.nextLine();
            }
            catch (Exception e) {
                vale=false;
                teclado.next();
            }
        }while(!vale);

        return res;
    }
}
